Linux系统动态链接库和静态链接库CMake的使用方法 您所在的位置:网站首页 cmake 引用动态库 Linux系统动态链接库和静态链接库CMake的使用方法

Linux系统动态链接库和静态链接库CMake的使用方法

2022-06-03 14:56| 来源: 网络整理| 查看: 265

基于2016华为精英挑战赛第三方库使用方法的总结

在寻找过特定子集点的最小路径问题,在数学上可以表示为求解满足约束问题的整数规划问题,求解整数规划问题高效率的第三方库可供使用,如lpsolve、glpk,lingo等。以下介绍基于lpsolve库的应用。lpsolve的使用将会单独介绍。

lpsolve简介

lp_solve库版权为LGPL.

Lesser General Public Licence,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码,这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。适合那些用于非 GPL 或非开源产品的开源类库或框架。 GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。 规则条款:   如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。(引用或修改LGPL的代码及其衍生也必须使用LGPL开源,源于闭源的代码不需要开源)。 因此LGPL协议的开源代码很适合作为第三方类库被商业软件直接引用,但不适合希望以开源代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

lpsolve 可以求解线性规划,整数规划,混合整数规划等优化问题。 lpsolve有Windows,Linux。ios,MATLAB等环境下的版本。 linux版本有以下文件 这里写图片描述 其中.a文件是静态链接库文件,.so是动态库链接文件 静态库名称一般为xxx.a,在编译时和应用程序链接在一起,这样的应用程序占用空间较大,但是可以在任意台电脑上使用,而不必担心电脑上是否有库的存在。 动态库名称一般为xxx.so,对于动态库即可以在编译时链接,也可以使用dlopen()/dlsym()/dlclose()函数在运行时调用,后种方式占用空间较小,且可以实现动态库在进程间共享,只在内存中保留一份,减少了内存开销。

Linux系统使用主要在与Cmake文件的使用,当然也可以手动编译。

#CMakeLists.txt# CMake 最低版本号要求cmake_minimum_required(VERSION 2.8)# 项目信息project(future_net)# include路径include_directories(${PROJECT_SOURCE_DIR}/lib)# 把 第三方 库 的 .a 文件和 .h 文件放到 代码的 lib 文件夹link_directories(${PROJECT_SOURCE_DIR}/lib)# 设置可执行文件生成路径set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../bin)# 生成debug版本SET(CMAKE_BUILD_TYPE "Release") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")# 查找当前目录下的所有源文件# 并将名称保存到 DIR_LIB_SRCS 变量aux_source_directory(. DIR_SRCS)# 指定生成目标 add_executable(future_net ${DIR_SRCS})#下面的 libxxx 是 第三方库 的名字:target_link_libraries(future_net libxxx)# 其他系统库,如果链接失败也一起链接:TARGET_LINK_LIBRARIES(future_net dl)TARGET_LINK_LIBRARIES(future_net pthread)

华为提供了一键式编译、链接、打包的执行脚本batch.sh,只需要在路径下执行 sh batch.sh 即可 这里写图片描述 只需要将lpsolve提供的库文件放在lib下,修改cmakelists.txt即可运行程序。

#batch.sh#!/bin/bashSCRIPT=$(readlink -f "$0") BASEDIR=$(dirname "$SCRIPT")cd $BASEDIRif [ ! -d future_net ] || [ ! -f readme.txt ]then echo "ERROR: $BASEDIR is not a valid directory of SDK-gcc for future_net." echo " Please run this script in a regular directory of SDK-gcc." exit -1fitmp=$(cmake --version 2>&1)if [ $? -ne 0 ]then echo "ERROR: You should install cmake(2.8 or later) first." echo " Please run 'sudo at-get install cmake' to install it." echo " or goto to download and install it." exitfirm -fr bin mkdir bin rm -fr build mkdir buildcd build cmake ../future_net make cd .. cp -r future_net bin/codecd bin tar -zcPf future_net.tar.gz * cp future_net.tar.gz ../ rm -rf code rm -f future_net.tar.gzcd ..


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有